OpenCV(项目)二维码识别(二维码、条形码)

您所在的位置:网站首页 二维码识别 开源 OpenCV(项目)二维码识别(二维码、条形码)

OpenCV(项目)二维码识别(二维码、条形码)

2024-07-15 23:15| 来源: 网络整理| 查看: 265

目录

过程

1、获取图片中的二维码信息

2、获取视频中的二维码信息

3、检测出二维码框

4、显示数据

5、添加数据,判断二维码是否授权

5-1:、添加数据

5-2、读取文件信息,放入数组

5-3、判断二维码是否授权

总代码

过程 1、获取图片中的二维码信息 # 检测图像中的码(解码) def Read_Decode_Pic(): img = cv2.imread('Resource/qrcode.jpg') # 遍历解码 for code in decode(img): print("条形码/二维码:", code) print("条形码/二维码数据:", code.data.decode('utf-8')) #解码数据

注:要解码数据的话,必须在for循环中进行,不能直接赋值 

二维码: 

 

 条形码:

2、获取视频中的二维码信息 # 检测视频中的码(解码) def Read_Decode_Cam(): cap = cv2.VideoCapture(0) #打开视频 while True: success, img = cap.read() #获取每一帧图片 for code in decode(img): #解码 print("条形码/二维码:", code) #解码内容 print("条形码/二维码数据:", code.data.decode('utf-8')) # 解码数据 cv2.imshow('result', img) #逐像素显示,不断更替,相当于视频 cv2.waitKey(1) #延时1ms

3、检测出二维码框

如果是矩形框的话,比较方便,但是旋转情况下,会不准确。因为rect获取的是正的矩形,无法旋转。

# 画出矩形 pts = code.rect #得到矩形四个角 cv2.rectangle(image, pts, (255,0,255), 3) #画出矩形

 所以我们需要获取多边形对它进行旋转:

注:polylines函数中需要的坐标类型是是CV_32S,所以需要转换一下

# 多边形获取(矩形的框) pts = np.array(code.polygon, np.int32) #获取多边形坐标 cv2.polylines(image, [pts], True, (0,0,255), 5) #画多边形框

 

 可以发现,这时我们可以检测到旋转的矩形框。

4、显示数据

获取矩形框的左上角作为Text的坐标(左边坐标),显示数据 

# 显示数据 pts_rect = code.rect print(pts_rect) cv2.putText(image, data, (pts_rect[0],pts_rect[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,0,0), 2) # 显示数据 矩形坐标 字体类型 字体大小 颜色 粗细

5、添加数据,判断二维码是否授权

         创建一个文件,里面放入一些二维码数据库,读取文件,判断二维码的数据是否在数据库里面。(不在则红色,表示未授权;在则绿色,表示已授权)

5-1:、添加数据

5-2、读取文件信息,放入数组 # 读取文件 def Read(): global Data_Array Data_Array = open('Authorited.txt').read().splitlines() #按行分隔 print('已授权的数据:\n', Data_Array)

5-3、判断二维码是否授权 # 判断二维码是否授权 def Judge(data): global color if data in Data_Array: #成功 color = (0, 255, 0) #绿色标记 print('Authorized\n') else: #失败 color = (0, 0, 255) #红色标记 print('Unauthorized\n')

总代码 # 二维码识别 import cv2 import numpy as np from pyzbar.pyzbar import decode # 读取文件 def Read(): global Data_Array Data_Array = open('Authorited.txt').read().splitlines() #按行分隔 print('已授权的数据:',Data_Array,'\n') # 判断二维码是否授权 def Judge(data): global color if data in Data_Array: #成功 color = (0, 255, 0) #绿色标记 print('Authorized\n') else: #失败 color = (0, 0, 255) #红色标记 print('Unauthorized\n') # 检测图像中的码(解码) def Read_Decode_Pic(image): # 遍历解码 for code in decode(image): # print("条形码/二维码:", code) data = code.data.decode('utf-8') print("条形码/二维码数据:", data) #解码数据 # 判断二维码是否授权 Judge(data) # 多边形获取(矩形的框) pts_poly= np.array(code.polygon, np.int32) #获取多边形坐标 cv2.polylines(image, [pts_poly], True, color, 5) #画多边形框 # 显示数据(获取矩形框的左上角作为Text的坐标(左边坐标),显示数据) pts_rect = code.rect # print(pts_rect) cv2.putText(image, data, (pts_rect[0],pts_rect[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.7, color, 2) # 显示数据 矩形坐标 字体类型 字体大小 颜色 粗细 cv2.imshow('image', image) #等画出所有矩形后显示 # 检测视频中的码(解码) def Read_Decode_Cam(): cap = cv2.VideoCapture(0) #打开视频 cap.set(3, 1000) #帧的宽度 cap.set(4, 800) #帧的高度 while True: success, image = cap.read() #获取每一帧图片 cv2.imshow('image', image) image = Read_Decode_Pic(image) #对每一帧图片检测 cv2.waitKey(1) #延时1ms if __name__ == '__main__': Read() #读取文件 img = cv2.imread('Resource/qrcode.jpg') Read_Decode_Pic(img) # 检测图像中的码(解码) Read_Decode_Cam() # 检测视频中的码(解码) cv2.waitKey(0)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3